When implementing a first in first out (FIFO) buffer, a circular buffer is used, to which a sequence of entries is stored. New entries are added to the head of the sequence of entries, and old entries are removed from the sequence's tail. By adding new entries and removing old entries, the active window in said circular buffer starts moving, it crawls around said circular buffer like a worm, it contracts and expands.
Whenever said sequence of entries extends beyond the last entry position of the buffer, wrap-around occurs, which means that the latest entries of said sequence are accommodated in the first entry positions of said buffer.
As said entries are arranged in a sequence of entries, an order exists between these entries. Situations arise where this order becomes important because, for example, the oldest or the youngest entry fulfilling a certain condition has to be selected. Different entries, which might, for example, both fulfill a given criterion, have to be compared with respect to their sequential priority.
One solution to this problem is to always leave a gap between the entry sequence's tail and the entry sequence's head, and to cause an instruction, which fulfills said criterion, to block younger instructions.
An disadvantage of this solution is that buffer space is wasted, because the buffer entries can not be fully utilized.